import { createFFmpeg, fetchFile } from '@ffmpeg/ffmpeg'

// 压缩视频
const squeezVideo = async (file: any, filename: any, filetype: any, width: any, height: any) => {
  console.log('file', file)
  console.log('filename', filename)
  console.log('filetype', filetype)
  console.log('width', width)
  console.log('height', height)
  // 分辨率
  const resolution = `${width / 2}x${height / 2}`
  // 实例化ffmpeg
  const ffmpeg = createFFmpeg({
    // ffmpeg路径
    corePath: 'ffmpeg-core.js',
    // 日志
    log: true,
    // 进度
    // progress: ({ ratio }) => {
    //     msg = `完成率: ${(ratio * 100.0).toFixed(1)}%`
    // }
  })
  console.log('file---', file)
  var { name } = file
  // msg = '正在加载 ffmpeg-core.js'
  // 开始加载
  await ffmpeg.load()
  // msg = '开始压缩'
  // 把文件加到ffmpeg   写文件
  ffmpeg.FS('writeFile', name, await fetchFile(file))
  // await ffmpeg.run('-i', name, '-b', '2000000', '-fs', '4194304', '-preset medium', 'superfast', 'put.mp4')
  // 开始压缩视频
  await ffmpeg.run('-i', name, '-b', '2000000', '-crf', '23', '-fs', '4194304', '-s', resolution, 'put.mp4')
  // msg = '压缩完成'
  // 压缩所完成，   读文件  压缩后的文件名称为 put.mp4
  const data = ffmpeg.FS('readFile', 'put.mp4')

  // 转换压缩后的视频格式  当前为 blob 格式
  var res = transToFile(data, filename, filetype)
  return new Promise((result, reject) => {
    result({
      filed: res,
    })
  })
}

// 类型转换 blob 转换 file
const transToFile = (data: any, filename: any, filetype: any) => {
  var filed: any = []
  console.log(data)
  // 转换bolb类型
  const blob = new Blob([data], { type: 'text/plain;charset=utf-8' })
  // 这么写是因为文件转换是异步任务
  const transToFile = async (blob: any, fileName: any, fileType: any) => {
    return new window.File([blob], fileName, { type: fileType })
  }
  const textContain = transToFile(blob, filename, filetype)
  // 转换完成后可以将file对象传给接口
  textContain.then((res) => {
    filed.push(res)
    console.log('res', res)
  })
  return filed
}
export { squeezVideo }
